package main

import (
	"fmt"
	"math"
	"math/rand"
)

func main() {
	// 初始化预测器
	forecaster := NewLoadForecaster(true, 0.7)

	// 模拟历史数据
	var historicalData []float64
	for i := 0; i < 10080; i++ { // 7天的每分钟数据
		historicalData = append(historicalData, 500+200*math.Sin(float64(i)/1440*2*math.Pi))
	}
	forecaster.TrainHistorical(historicalData)

	// 初始化储能系统
	storage := &EnergyStorage{
		Capacity:         1000, // 1MWh
		CurrentEnergy:    500,  // 初始存储500kWh
		MaxChargeRate:    200,  // 200kW
		MaxDischargeRate: 300,  // 300kW
		Efficiency:       0.95, // 95%效率
	}

	// 创建需量控制器
	controller := NewDemandController(forecaster, storage, 800) // 800kW合同需量

	// 模拟实时运行
	for i := 0; i < 1440; i++ { // 模拟24小时运行
		currentLoad := 600 + 300*math.Sin(float64(i)/60*2*math.Pi) + rand.Float64()*100
		demand, action := controller.CalculateDynamicDemand(currentLoad)

		fmt.Printf("时间: %02d:%02d, 当前负荷: %.2fkW, 需量: %.2fkW, 储能动作: %.2fkW\n",
			i/60, i%60, currentLoad, demand, action)
	}
}
